package info.pandd.centrumDowodzeniaSMS;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class ListaKontaktowActivity extends ListActivity{
	public ArrayList<String> nazwyKontaktowAL = new ArrayList<String>();
	public ArrayList<String> numeryKontaktowAL = new ArrayList<String>();
	public ArrayList<String> zaznaczoneKontakty; 
	
	int index = 0;
	ListView lvKontakty;
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.list);
		
		zaznaczoneKontakty = new ArrayList<String>();
		zaznaczoneKontakty.clear();
		zaznaczoneKontakty = this.getIntent().getStringArrayListExtra("selectedIds");
		ArrayList<String> kontakty = new ArrayList<String>();
		
		lvKontakty = (ListView) findViewById(android.R.id.list);
		String[] proj = new String[]{Data._ID, Phone.DISPLAY_NAME, CommonDataKinds.Phone.TYPE, Phone.NUMBER};
		
		Cursor c = managedQuery(Phone.CONTENT_URI, proj, null, null, null);
		while(c.moveToNext()){
			if(c.getInt(2) == Phone.TYPE_MOBILE){
				String name = c.getString(1) + "\n" + c.getString(3);
				kontakty.add(name);
			}
		}
		
		final ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, kontakty);
		aa.sort(new Comparator<String>(){
			public int compare(String obj1, String obj2){
				return obj1.compareTo(obj2);
			}
		});
		
		lvKontakty.setAdapter(aa);
        lvKontakty.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        lvKontakty.setTranscriptMode(ListView.TRANSCRIPT_MODE_DISABLED);
        //petla zaznaczania poprzednio wybranych kontaktow i dodania ich do listy
		Iterator<String> itNrZaznaczonych = zaznaczoneKontakty.iterator();
      	while(itNrZaznaczonych.hasNext()){
      		String indeks = itNrZaznaczonych.next();
      		int intIndeks = Integer.parseInt(indeks);
      		lvKontakty.setItemChecked(intIndeks, true);
      		String zawartoscElementu = (String) lvKontakty.getItemAtPosition(intIndeks);
			String[] skladoweKontaktu = zawartoscElementu.split("\n");
			nazwyKontaktowAL.add(skladoweKontaktu[0]);				
			numeryKontaktowAL.add(skladoweKontaktu[1]);
      	}      	
      	
      	//obsluga zaznaczen elementow listy
        lvKontakty.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
				String zawartoscElementu = (String) lvKontakty.getItemAtPosition(arg2);
				String[] skladoweKontaktu = zawartoscElementu.split("\n");
				
				//sprawdzić, czy dodajemy, czy usuwamy - lvKontakty.isItemChecked(arg2) zwraca wartość po zmianie już
				if(lvKontakty.isItemChecked(arg2)){
					//dodajemy do listy zaznaczonych
					nazwyKontaktowAL.add(skladoweKontaktu[0]);				
					numeryKontaktowAL.add(skladoweKontaktu[1]);
					zaznaczoneKontakty.add(Integer.toString(arg2));
				}
				else{
					//usuwamy z listy zaznaczonych
					int position = numeryKontaktowAL.indexOf(skladoweKontaktu[1]);
					nazwyKontaktowAL.remove(position);				
					numeryKontaktowAL.remove(position);
					zaznaczoneKontakty.remove(Integer.toString(arg2));
				}
				//skok do początku - zapisanie klikniętej pozycji
				index = arg2;
			}
		});
        
        Button wybierz = (Button) findViewById(R.id.confirmContacts);
		wybierz.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				Intent resultIntent = new Intent();
				resultIntent.putExtra("ile", nazwyKontaktowAL.size());
				resultIntent.putExtra("contactNames", nazwyKontaktowAL);
				resultIntent.putExtra("contactNumbers", numeryKontaktowAL);
				resultIntent.putExtra("selectedIds", zaznaczoneKontakty);
				setResult(Activity.RESULT_OK, resultIntent);
				finish();
			}
		});
		
		Button wyczyscZaznaczenie = (Button) findViewById(R.id.deselectAll);
		wyczyscZaznaczenie.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				lvKontakty.setSelection(0);
				int count = lvKontakty.getAdapter().getCount();
		        for (int i = 0; i < count; i++) {
		             lvKontakty.setItemChecked(i, false);
		        }
	            nazwyKontaktowAL.clear();
	            numeryKontaktowAL.clear();
	            zaznaczoneKontakty.clear();
				index = 0;
				Toast msg = Toast.makeText(getApplicationContext(), "Odznaczono wszystkie kontakty.", Toast.LENGTH_SHORT);
				msg.show();
			}
		});
		
		Button zaznaczWszystkie = (Button) findViewById(R.id.selectAll);
		zaznaczWszystkie.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				lvKontakty.setSelection(0);
				nazwyKontaktowAL.clear();
	            numeryKontaktowAL.clear();
	            zaznaczoneKontakty.clear();
				int count = lvKontakty.getAdapter().getCount();
		        for (int i = 0; i < count; i++) {
		            lvKontakty.setItemChecked(i, true);
		            String zawartoscElementu = (String) lvKontakty.getItemAtPosition(i);
					String[] skladoweKontaktu = zawartoscElementu.split("\n");
					//dodajemy do listy zaznaczonych
					nazwyKontaktowAL.add(skladoweKontaktu[0]);				
					numeryKontaktowAL.add(skladoweKontaktu[1]);
					zaznaczoneKontakty.add(Integer.toString(i));
		        }
				index = 0;
				Toast msg = Toast.makeText(getApplicationContext(), "Zaznaczono wszystkie kontakty.", Toast.LENGTH_SHORT);
				msg.show();
			}
		});
		
		//skok do ostatnio zaznaczonej pozycji
		lvKontakty.setSelection(index);
	}//eof onCreate()	
}